package com.liu.activiti.service;

import com.liu.activiti.pojo.activiti.*;

import java.util.List;
import java.util.Map;

/**
 * @author gzj
 * @date 2024/1/10 11:02
 * @description 工作流引擎核心方法
 */
public interface ActivitiCoreService {

    //主动隐藏掉
    //businesskey规则问题
    //忽略人的信息 审批意见
    //画图-找个案例
    //控制部署时间

    /*** 二次封装接口 **/

    /**
     * 根据xml部署流程
     * @param fileResourceAddress 文件相对路径地址
     * @param processName 流程名称
     */
    CustomDeployment deployByXmlFile(String fileResourceAddress, String processName);


    /**
     * 启动工作流
     * @param processKey 工作流定义key
     * @param businessKey 业务标识
     * @param variableMap 流程变量
     */
    CustomProcessInstance startActiviti(String processKey, String businessKey, Map<String, Object> variableMap);

    /**
     * 强制结束流程
     * @param completeTask 待处理任务实体
     * @return
     */
    Boolean forceEnd(CompleteTask completeTask);


    /**
     * 待处理工作流任务列表
     * @param completeTask 任务实体
     * @return 待处理工作流任务列表
     */
    List<CustomPeddingTaskRep> peddingTaskList(CompleteTask completeTask);

    /**
     * 完成任务
     * @param completeTask 任务实例对象
     * @return
     */
    Boolean completeTask(CompleteTask completeTask);

    /**
     * 回退任务到上一步
     * @param completeTask 任务实体
     * @param previousDefinitionKey  userTask ID标识
     * @return
     */
    Boolean reBackTask(CompleteTask completeTask, String previousDefinitionKey, Map<String, Object> variables);


    /**
     * 根据流程实例ID获取完整流程节点信息
     * @param processDefinitionId 流程定义ID
     * @return
     */
    TreeNode getProcessNodeInfo(String processDefinitionId, String processInstanceId);

    /**
     * 获取当前流程正在运行节点信息
     * @param processInstanceId 流程实例ID
     * @return
     */
    List<CustomProcessNode> getProcessCurrentNodeInfo(String processInstanceId);

    /**
     * 获取正在运行/已经运行完所有流程
     * @param historyProcessReq 流程入参
     * @return
     */
    TableDataInfo listHistoryProcess(HistoryProcessReq historyProcessReq);
}
